package com.tecode.myBooks.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-12-12
 * @Description:
 *
 * 统计在线人数。
 *		1.确定什么叫在线人数。
 *			使用账户密码或者手机号登陆成功的回话才叫在线人数。
 *	    2.登陆成功的信息存放在什么地方？
 *	    		存放在session域的一个叫loginUser的属性中。
 *	   	3.判断向session域中添加一个属性时，该属性的名称是否为loginUser。
 *	   		如果是这个名称，则在线人数+1；
 *	   	4.整个系统的在线人数数据存放在是地方？
 *			在ServletContext域中设置一个属性来存放当前的在线人数。
 *
 *		5.减少在线人数。
 *			session销毁？
 *				也需要判断session 中是否有属性名为loginUser的属性。 存放在-1；
 *			点击退出按钮。
 *
 *
 *		需要监听的对象有哪些？
 *			session的属性
 *			session对象的销毁
 *
 *
 *
 */

@WebListener
public class CountNumsListener implements HttpSessionAttributeListener{
	public CountNumsListener(){
		System.out.println("CountNumsListener....");
	}

	//记录当前的在线人数的。
	private static long nums = 0;



	@Override
	public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
		String name = httpSessionBindingEvent.getName();
		if(name.equals("loginUser")){
			++nums;
			httpSessionBindingEvent.getSession().getServletContext().setAttribute("countNums",nums);
		}
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
		System.out.println("2");
		String name = httpSessionBindingEvent.getName();
		if(name.equals("loginUser")){
			if(nums>0)
				--nums;
			httpSessionBindingEvent.getSession().getServletContext().setAttribute("countNums",nums);
		}
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {}
}